I. Proceso de análisis prescriptivo

Datlas es un startup de analítica dedicada a la transformación de datos para negocios con la intención de crear soluciones personalizadas. Esto, a través del desarrollo de contenido, plataformas digitales y métodos que se apalancan en técnicas de analítica avanzada. La empresa se encuentra ubicada en la colonia centro de la ciudad de Monterrey. Sólo hay 1 CEDIS y se encuentra ubicado en el mismo lugar que las oficinas. El negocio puede atender cualquiera de los 13 municipios de la zona metropolitana de Monterrey.

El socio formador nos compartió una carpeta con diferentes datos de la empresa los datos proporcionados son los siguientes:

  • Catálogo de productos
  • Clientes
  • Pedidos
  • Detalle de pedidos
  • Clientes prospecto
  • Ubicación de clientes y clientes prospecto

Así mismo conducimos una investigación de mercado enfocada en los competidores que Alimentos y Snacks Monterrey tiene en el sector de comercializadoras de alimentos. También extraimos datos de fuentes secundarias como Euromonitor para obtener datos macroeconómicos y poder hacer predicciones sobre el mercado y la economía para los próximos años.

Para el análisis exploratorio de datos se unieron las bases de datos proporcionadas por el socio formador utilizando las variables en común (id´s) con excepción de la base de prospectos.

II. Antecedentes del caso

Dicha empresa opera desde inicios del 2020 y se dedica a la fabricación y distribución de una amplia gama de productos alimenticios con enfoque a restaurantes, hoteles, catering y cafeterías. Su mecanismo de ventas consiste en un portal en línea con entrega a negocios en un lapso de 1 a 2 días. También se pueden programar entregas recurrentes. Como se mencionó anteriormente, Alimentos y Snacks Monterrey se encuentra en una fase de expansión para el 2023. La empresa cuenta con la oportunidad de dedicarle recursos comerciales a un proyecto de expansión.

III. Tipo de estrategia que se propone

El tipo de estrategia que se recomienda para la empresa Datlas es la de Desarrollo de Mercados. Esto significa ganar participación en el mercado por medio de la atracción de nuevos clientes hacia productos existentes. La base de datos presenta 56 clientes activos de su portafolio de 100, lo que significa que sólo 56 de sus clientes han hecho pedidos en los últimos años. Por lo tanto dentro de los mismos clientes que ya tiene recomendamos poder hacer que esos 44 no activos comiencen a ser activos, ya que reconocemos que los 56 clientes suelen pedir las mismas cantidades de productos año tras año. Agregando a esto, la funcionalidad de atraer nuevos clientes cumple con el objetivo principal de expansión sin tener que alterar su catálogo de productos.

Para esto los métodos que recomendamos son trabajar con varios canales dentro de los mismos clientes por ejemplo mejorar las ventas internas, socios de ventas de canal, medios digitales, franquicias y alianzas estratégicas.

También buscamos identificar aquellos prospectos con un perfil similar a los clientes más recurrentes con la intención de aumentar las ventas en los próximos años.

IV. Objetivos y Alcances de la consultoría

Perspectivas

La compañía de snacks con la que estamos trabajando en el reto se dedica a vender snacks por medio de su página web y cuenta con solo 1 sucursal la cual está ubicada en el centro de Monterrey y de esta salen todos sus pedidos. Uno de los problemas dentro de sus procesos que decidimos solucionar está relacionado con la logística ya que tener una sola sucursal puede provocar que las entregas se retrasen por problemas de saturación así como por la distancia de la sucursal a los clientes.

Al estudiar los procesos de la empresa podremos llegar a una conclusión acerca de donde es más conveniente ubicar el nuevo centro de distribución de la empresa o si combiene enfocarse solamente en aumentar su cartera de clientes.

Objetivos

Se requiere atender más negocios, puntos de venta, desplazar más producto y aumentar ventas. Por lo que como equipo nos enfocaremos en el área de logística, específicamente encontrar un punto estratégico para atender las necesidades de sus clientes de la mejor manera posible. Para esto analizaremos las características de sus mejores clientes actuales para después buscar dentro de los prospectos a aquellos que tienen esas mismas características o similares y ver donde están ubicados para ver si sería necesario abrir otras sucursal o expandir la que ya tienen. Esto ayudaría a la organización socio formadora a aumentar su eficiencia y eficacia e invertir sus recursos de manera correcta y estratégicamente.

Temas estratégicos

El ámbito de alcance para el reto es toda el área metropolitana de Monterrey, se tomarán como variables las características de clientes actuales así como las de clientes potenciales y la ubicación geográfica de cada uno de estos puntos. Las principales entidades a analizar son todos en la cartera de clientes del socio formador. .

Ejes de trabajo

El siguiente es un ejemplo base de cómo se vería un mapa conceptual con base al cumplimiento del objetivo de crecimiento de venta de negocios:

El mapa estratégico refleja mucho de la estrategia de la empresa y cuál es su propósito u objetivo para su expansión. El punto de vista financiero se enfoca en aumentar su cartera de clientes, aumentar la distribución de cualquier producto y maximizar las ventas de tal forma que que los beneficios se hagan recurrentes.

V. Descripción detallada de los resultados con evidencias

Base1 <- merge(detalle,catalogo, by.x = "id_producto", by.y = "id_producto", all.x = T)
Base2 <- merge(pedido,clientes, by.x = "id_cliente", by.y = "id_cliente", all.x = T)
Base <- merge(Base1,Base2, by.x = "id_pedido", by.y = "id_pedido", all.x = T)

Exploración de la base de datos

summary(Base)
##    id_pedido      id_producto       id_detalle        cantidad    
##  Min.   :    1   Min.   :  1.00   Min.   :     1   Min.   : 1.00  
##  1st Qu.: 7489   1st Qu.: 26.00   1st Qu.: 38516   1st Qu.:15.00  
##  Median :14995   Median : 52.00   Median : 77030   Median :20.00  
##  Mean   :14997   Mean   : 51.52   Mean   : 77030   Mean   :18.42  
##  3rd Qu.:22483   3rd Qu.: 77.00   3rd Qu.:115544   3rd Qu.:24.00  
##  Max.   :30000   Max.   :102.00   Max.   :154059   Max.   :31.00  
##                                                                   
##     nombre              mls                gms            precio_unidad   
##  Length:154059      Length:154059      Length:154059      Min.   : 12.00  
##  Class :character   Class :character   Class :character   1st Qu.: 37.00  
##  Mode  :character   Mode  :character   Mode  :character   Median :103.00  
##                                                           Mean   : 87.95  
##                                                           3rd Qu.:124.00  
##                                                           Max.   :250.00  
##                                                                           
##      sku              familia           categoria          activo       
##  Length:154059      Length:154059      Length:154059      Mode:logical  
##  Class :character   Class :character   Class :character   TRUE:154059   
##  Mode  :character   Mode  :character   Mode  :character                 
##                                                                         
##                                                                         
##                                                                         
##                                                                         
##    id_cliente      fechapedido                    
##  Min.   :  1.00   Min.   :2020-01-01 00:00:00.00  
##  1st Qu.: 13.00   1st Qu.:2020-10-15 00:00:00.00  
##  Median : 25.00   Median :2021-07-26 00:00:00.00  
##  Mean   : 30.04   Mean   :2021-07-29 16:41:42.96  
##  3rd Qu.: 35.00   3rd Qu.:2022-05-15 00:00:00.00  
##  Max.   :100.00   Max.   :2023-02-28 00:00:00.00  
##                                                   
##   fechaentrega                    cancelado            lat       
##  Min.   :2020-01-02 00:00:00.00   Mode :logical   Min.   :25.41  
##  1st Qu.:2020-10-16 00:00:00.00   FALSE:146232    1st Qu.:25.67  
##  Median :2021-07-27 00:00:00.00   TRUE :7827      Median :25.68  
##  Mean   :2021-07-30 13:19:22.25                   Mean   :25.68  
##  3rd Qu.:2022-05-16 00:00:00.00                   3rd Qu.:25.70  
##  Max.   :2023-02-28 00:00:00.00                   Max.   :25.96  
##  NA's   :209                                                     
##       long         nom_estab          raz_social          per_ocu         
##  Min.   :-100.5   Length:154059      Length:154059      Length:154059     
##  1st Qu.:-100.3   Class :character   Class :character   Class :character  
##  Median :-100.3   Mode  :character   Mode  :character   Mode  :character  
##  Mean   :-100.3                                                           
##  3rd Qu.:-100.3                                                           
##  Max.   :-100.1                                                           
##                                                                           
##   tipo_vial           nom_vial           edificio          edificio_e       
##  Length:154059      Length:154059      Length:154059      Length:154059     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##   tipo_asent         nomb_asent         tipoCenCom         nom_CenCom       
##  Length:154059      Length:154059      Length:154059      Length:154059     
##  Class :character   Class :character   Class :character   Class :character  
##  Mode  :character   Mode  :character   Mode  :character   Mode  :character  
##                                                                             
##                                                                             
##                                                                             
##                                                                             
##   num_local          cod_postal           cve_ent     entidad         
##  Length:154059      Length:154059      Min.   :19   Length:154059     
##  Class :character   Class :character   1st Qu.:19   Class :character  
##  Mode  :character   Mode  :character   Median :19   Mode  :character  
##                                        Mean   :19                     
##                                        3rd Qu.:19                     
##                                        Max.   :19                     
##                                                                       
##     CVE_MUN       municipio            cve_loc   localidad        
##  Min.   : 6.00   Length:154059      Min.   :1   Length:154059     
##  1st Qu.:39.00   Class :character   1st Qu.:1   Class :character  
##  Median :39.00   Mode  :character   Median :1   Mode  :character  
##  Mean   :36.33                      Mean   :1                     
##  3rd Qu.:39.00                      3rd Qu.:1                     
##  Max.   :49.00                      Max.   :1                     
##                                                                   
##      ageb              manzana     
##  Length:154059      Min.   : 1.00  
##  Class :character   1st Qu.: 5.00  
##  Mode  :character   Median :14.00  
##                     Mean   :15.64  
##                     3rd Qu.:24.00  
##                     Max.   :58.00  
## 
str(Base)
## 'data.frame':    154059 obs. of  39 variables:
##  $ id_pedido    : num  1 1 1 1 1 2 2 2 2 2 ...
##  $ id_producto  : num  40 53 17 44 99 96 37 96 9 43 ...
##  $ id_detalle   : num  2 4 1 5 3 10 7 11 12 6 ...
##  $ cantidad     : num  22 19 1 10 28 24 28 24 23 23 ...
##  $ nombre       : chr  "FLAN" "MACHACA" "CARNITAS/PIERNA" "HAMBURGUESA" ...
##  $ mls          : chr  "n/a" "n/a" "n/a" "n/a" ...
##  $ gms          : chr  "n/a" "500" "500" "500" ...
##  $ precio_unidad: num  80 134 123 105 103 105 133 105 104 50 ...
##  $ sku          : chr  "A389H312QY" "B208J424BU" "F481C424CT" "H265D235SG" ...
##  $ familia      : chr  "preparado" "animal" "animal" "animal" ...
##  $ categoria    : chr  "normal" "congelado" "congelado" "congelado" ...
##  $ activo       : logi  TRUE TRUE TRUE TRUE TRUE TRUE ...
##  $ id_cliente   : num  74 74 74 74 74 19 19 19 19 19 ...
##  $ fechapedido  : POSIXct, format: "2020-01-01" "2020-01-01" ...
##  $ fechaentrega : POSIXct, format: "2020-01-02" "2020-01-02" ...
##  $ cancelado    : logi  FALSE FALSE FALSE FALSE FALSE FALSE ...
##  $ lat          : num  25.7 25.7 25.7 25.7 25.7 ...
##  $ long         : num  -100 -100 -100 -100 -100 ...
##  $ nom_estab    : chr  "RESTAURANTE EL BUEY" "RESTAURANTE EL BUEY" "RESTAURANTE EL BUEY" "RESTAURANTE EL BUEY" ...
##  $ raz_social   : chr  "ALIMENTOS CUBE SA DE CV" "ALIMENTOS CUBE SA DE CV" "ALIMENTOS CUBE SA DE CV" "ALIMENTOS CUBE SA DE CV" ...
##  $ per_ocu      : chr  "31 a 50 personas" "31 a 50 personas" "31 a 50 personas" "31 a 50 personas" ...
##  $ tipo_vial    : chr  "CALLE" "CALLE" "CALLE" "CALLE" ...
##  $ nom_vial     : chr  "TENAYUCA" "TENAYUCA" "TENAYUCA" "TENAYUCA" ...
##  $ edificio     : chr  NA NA NA NA ...
##  $ edificio_e   : chr  NA NA NA NA ...
##  $ tipo_asent   : chr  "COLONIA" "COLONIA" "COLONIA" "COLONIA" ...
##  $ nomb_asent   : chr  "RESIDENCIAL ANAHUAC 1 SECTOR" "RESIDENCIAL ANAHUAC 1 SECTOR" "RESIDENCIAL ANAHUAC 1 SECTOR" "RESIDENCIAL ANAHUAC 1 SECTOR" ...
##  $ tipoCenCom   : chr  NA NA NA NA ...
##  $ nom_CenCom   : chr  NA NA NA NA ...
##  $ num_local    : chr  NA NA NA NA ...
##  $ cod_postal   : chr  "66457" "66457" "66457" "66457" ...
##  $ cve_ent      : num  19 19 19 19 19 19 19 19 19 19 ...
##  $ entidad      : chr  "NuevoLeon" "NuevoLeon" "NuevoLeon" "NuevoLeon" ...
##  $ CVE_MUN      : num  46 46 46 46 46 26 26 26 26 26 ...
##  $ municipio    : chr  "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" ...
##  $ cve_loc      : num  1 1 1 1 1 1 1 1 1 1 ...
##  $ localidad    : chr  "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" "San Nicolás de los Garza" ...
##  $ ageb         : chr  "049A" "049A" "049A" "049A" ...
##  $ manzana      : num  11 11 11 11 11 1 1 1 1 1 ...
Base$nom_estab <- as.factor(Base$nom_estab)
Base$municipio <- as.factor(Base$municipio)
Base$entidad <- as.factor(Base$entidad)
Base$tipo_asent <- as.factor(Base$tipo_asent)
Base$municipio <- as.factor(Base$entidad)
Base$tipo_vial <- as.factor(Base$tipo_vial)
Base$per_ocu <- as.factor(Base$per_ocu)
Base$familia <- as.factor(Base$familia)
Base$categoria <- as.factor(Base$categoria)
Base$nombre <- as.factor(Base$nombre)
Base$localidad <- as.factor(Base$localidad)
Base$nombre <- as.factor(Base$nombre)
Base$id_cliente <- as.factor(Base$id_cliente)
Base$manzana <- as.factor(Base$manzana)
Base$Total <- Base$cantidad * Base$precio_unidad
Base %<>% group_by(id_pedido) %>%  mutate(cantidad_pedido = sum(cantidad),
            ventas_pedido = sum(Total)) %>% ungroup()
ggplot(Base, aes(x=localidad, y=Total, fill=localidad)) + 
  geom_bar(stat="identity") + 
  scale_fill_brewer(palette = "Blue") +
coord_flip()
## Warning in pal_name(palette, type): Unknown palette Blue

La gráfica de barras presenta el total de ventas que existen por parte de la empresa por cada uno de los municipios en la zona metropolitana de Monterrey. Como se puede observar, está claro que el municipio de Monterrey tiene un ventaja considerable sobre todos los demás municipios dándonos a entender que la mayoría de sus clientes están concentrados en esa zona. San Nicolás y San Pedro fueron los siguientes municipios más altos y esto puede presentarse como una oportunidad de expansión atractiva para la empresa.

ventas_por_tienda <- Base %>%
  group_by(id_cliente) %>%
  summarise(total_venta = sum(Total)) %>%
  arrange(desc(total_venta))
ventas_por_tienda
## # A tibble: 56 × 2
##    id_cliente total_venta
##    <fct>            <dbl>
##  1 5              7140516
##  2 24             7113992
##  3 30             7004642
##  4 31             6935632
##  5 27             6913895
##  6 4              6901913
##  7 16             6882970
##  8 26             6859402
##  9 19             6835183
## 10 25             6787978
## # … with 46 more rows

En la tabla anterior podemos observar que de sus 100 clientes actuales solo 56 de ellos permanecen activos y han realizado pedidos en los últimos años. También podemos ver que su cliente estrella es El Mago Restaurante y Banquetes.

Base$fechapedido <- as.yearqtr(Base$fechapedido)
TS <- Base %>%
  group_by(fechapedido) %>%
  summarise(total_venta = sum(Total))
TS
## # A tibble: 13 × 2
##    fechapedido total_venta
##    <yearqtr>         <dbl>
##  1 2020 Q1        19558122
##  2 2020 Q2        20142936
##  3 2020 Q3        19394997
##  4 2020 Q4        20206386
##  5 2021 Q1        20307492
##  6 2021 Q2        19919844
##  7 2021 Q3        20191812
##  8 2021 Q4        18551322
##  9 2022 Q1        19657319
## 10 2022 Q2        19616103
## 11 2022 Q3        19758087
## 12 2022 Q4        19766473
## 13 2023 Q1        12894784
plot(TS$fechapedido,TS$total_venta, type="l",col="blue", lwd=2, xlab ="Date",ylab ="ventas", main = "VENTAS")

En la gráfica anterior podemos observar las ventas y como estas se mantienen constantes año tras año. Esto es debido a que los 56 clientes que encontramos activos normalmente realizan los mismos pedidos o similiares a traves de los años, son proveedores muy constantes que al no tener tanto crecimiento no necesitan más de lo que ya piden.

Dicker-Fuller test

adf.test(Base$Total) 
## Warning in adf.test(Base$Total): p-value smaller than printed p-value
## 
##  Augmented Dickey-Fuller Test
## 
## data:  Base$Total
## Dickey-Fuller = -53.091, Lag order = 53, p-value = 0.01
## alternative hypothesis: stationary

H0: Non-stationary HA: Stationary. p-values < 0.05 rechazar H0. P-Value > 0.05. no se rechaza H0. La serie de tiempo es ESTACIONARIA ya que se rechaza H0 con un p-value de 0.01

Esto significa que la serie de tiempo exhibe una estructura constante y predecible a lo largo del tiempo.

MODELO ARIMA

La función “auto.arima” busca entre diferentes combinaciones de órdenes y selecciona el modelo que minimiza el criterio de información seleccionado. Luego devuelve el modelo ajustado que mejor se ajusta a la serie de tiempo proporcionada.

m.tw=auto.arima(TS$total_venta)
summary(m.tw)
## Series: TS$total_venta 
## ARIMA(0,0,0) with non-zero mean 
## 
## Coefficients:
##             mean
##       19228129.0
## s.e.    521628.8
## 
## sigma^2 = 3.831e+12:  log likelihood = -206.26
## AIC=416.52   AICc=417.72   BIC=417.65
## 
## Training set error measures:
##              ME    RMSE     MAE       MPE     MAPE     MASE        ACF1
## Training set  0 1880620 1078485 -1.362012 6.755503 1.017869 -0.01322231
f.tw=forecast(m.tw, h=12)
plot(f.tw)

La gráfica anterior muestra el comportamiento de las ventas a través del tiempo y su predicción a futuro. Como podemos observar se trata de una serie de datos estacionaria ya que no existe variabilidad en los datos, lo que significa que no es posible hacer predicciones a futuro con los datos proporcionados por el socio formador.

Map Data Visualization

map<-readShapePoly("/Users/anavaleriagarciarenteria/Desktop//RETO/municipios/municipiosZMM.shp",IDvar="CVE_MUN",proj4string=CRS("+proj=longlat")) ### reads data from a polygon shapefile.
## Warning: shapelib support is provided by GDAL through the sf and terra packages
## among others
lmat<-coordinates(map)
names(lmat)<-c("lon","lat")
map.centroid<-coordinates(map)  
summary(map)
## Object of class SpatialPolygonsDataFrame
## Coordinates:
##          min       max
## x -100.86190 -99.68620
## y   25.22379  26.39517
## Is projected: FALSE 
## proj4string : [+proj=longlat +datum=WGS84 +no_defs]
## Data attributes:
##      CVEGEO  CVE_ENT    CVE_MUN                NOMGEO 
##  19006  :1   19:13   006    :1   Apodaca          :1  
##  19009  :1           009    :1   Cadereyta Jiménez:1  
##  19018  :1           018    :1   García           :1  
##  19019  :1           019    :1   General Escobedo :1  
##  19021  :1           021    :1   Guadalupe        :1  
##  19026  :1           026    :1   Juárez           :1  
##  (Other):7           (Other):7   (Other)          :7
Base$CVE_MUN <- as.character(Base$CVE_MUN)
Base$CVE_MUN[Base$CVE_MUN=="6"] <- "006"
Base$CVE_MUN[Base$CVE_MUN=="19"] <- "019"
Base$CVE_MUN[Base$CVE_MUN=="21"] <- "021"
Base$CVE_MUN[Base$CVE_MUN=="26"] <- "026"
Base$CVE_MUN[Base$CVE_MUN=="39"] <- "039"
Base$CVE_MUN[Base$CVE_MUN=="45"] <- "045"
Base$CVE_MUN[Base$CVE_MUN=="46"] <- "046"
Base$CVE_MUN[Base$CVE_MUN=="48"] <- "048"
Base$CVE_MUN[Base$CVE_MUN=="49"] <- "049"
map_sf<-read_sf("/Users/anavaleriagarciarenteria/Desktop//RETO/municipios/municipiosZMM.shp")
plot(map,col="grey",border="blue",axes=TRUE,las=1) + title(main="Zona metropolitana de Monterrey")

## integer(0)

La gráfica anterior muestra cómo están distribuidos los municipios que atiende actualmente la empresa Alimentos y Snacks Monterrey.

map_dataa<-geo_join(map,Base,'CVE_MUN','CVE_MUN',how='inner')
## Warning: We recommend using the dplyr::*_join() family of functions instead.
map_datab<-right_join(map_sf,Base,by="CVE_MUN")
## Warning in sf_column %in% names(g): Each row in `x` is expected to match at most 1 row in `y`.
## ℹ Row 1 of `x` matches multiple rows.
## ℹ If multiple matches are expected, set `multiple = "all"` to silence this
##   warning.

Matriz de Connectividad

map.link<-poly2nb(map,queen=T)              
map.linkW<-nb2listw(map.link, style="W")
map.centroid<-coordinates(map)
plot(map,border="blue",axes=FALSE,las=1)
plot(map,col="grey",border=grey(0.9),axes=T,add=T) 
plot(map.linkW,coords=map.centroid,pch=19,cex=0.1,col="blue",add=T)  
title("Spatial Connectivity Matrix")

La matriz espacial de conectividad es una herramienta que se utiliza en análisis geoespaciales y estadísticos. Su objetivo es describir y cuantificar la conectividad que tienen las unidades en un conjunto de datos. En este caso estamos analizando los municipios de Nuevo León, por lo tanto se puede interpretar que tienen una proximidad geográfica espacial, siendo una conectividad que es recíproca. La realización de esta matriz nos ayudará a identificar en futuros análisis la detección de patrones espaciales, su autocorrelación y un modelado estadístico. Están unidos por los centroides representados por la línea azul. Por lo tanto esto representa la conectividad del centro de cada municipio y su relación para futuros análisis.

Ubicación de los clientes activos

ggplot() + geom_sf(data = map_sf)  +
  geom_point(data = latlongventas, aes(x = longitud, y = latitud, color = total_venta)) +
  theme_void() + theme(legend.position = "right")

En el mapa anterior se muestran los 56 clientes activos de Alimentos y Snacks Monterrey, y sus promedios de ventas. La mayoría tiene un promedio de aproximadamente $6,000,000 de pesos, los que tienen un mayor número de ventas se encuentran en el centro del municipio de Monterrey que pudiera inferirse que es donde se perciben más ingresos.

mapa_markers <- leaflet(data=latlongventas) %>%
  addTiles() %>%
  addMarkers(lng = ~longitud, lat=~latitud, popup = ~nom_estab)
mapa_markers

En el mapa anterior se puede observar los clientes activos de Alimentos y Snacks Monterrey utilizando la herramienta de google maps. Son un total de 56 clientes activos en contraste con los 100 que tienen en su portafolio. Los anteriores suelen tener ventas de productos similares y constantes a lo largo de los años. Hay 11 hoteles y 45 restaurantes.

Alimentos más vendidos

ggplot(Base, aes(x=reorder(familia,-Total), y=Total, fill=familia)) + 
  geom_bar(stat="identity") + 
  scale_fill_brewer(palette = "Blue") +
coord_flip()
## Warning in pal_name(palette, type): Unknown palette Blue

En la gráfica anterior podemos observar el total de ventas por familia de aliementos y es evidente que los productos animales son los que generan mayores ingresos para la empresa.

Prospectos

prospectos$nombre_act <- as.factor(prospectos$nombre_act)
prospectos$localidad <- as.factor(prospectos$localidad)
base_f <- prospectos %>%
  filter(localidad %in% c("Monterrey"))

Para la selección de clientes prospectos filtramos la base de datos solo para el municipio de Monterrey ya que la mayor parte de sus clientes activos actuales se encuentran en esa area.

base_f <- base_f %>%
  filter(nombre_act %in% c("Restaurantes con servicio de preparación de alimentos a la carta o de comida corrida","Restaurantes con servicio de preparación de pizzas, hamburguesas, hot dogs y pollos rostizados para llevar"))
base_f
## # A tibble: 838 × 28
##      lat  long nombre_…¹ nom_e…² raz_s…³ per_ocu tipo_…⁴ nom_v…⁵ edifi…⁶ edifi…⁷
##    <dbl> <dbl> <fct>     <chr>   <chr>   <chr>   <chr>   <chr>   <chr>   <chr>  
##  1  25.7 -100. Restaura… BURGUE… <NA>    0 a 5 … AVENIDA PASEO … <NA>    <NA>   
##  2  25.6 -100. Restaura… VANCOU… PROMOT… 6 a 10… AVENIDA REVOLU… CENTRO… PLANTA…
##  3  25.6 -100. Restaura… LA TIE… <NA>    0 a 5 … AVENIDA EUGENI… <NA>    <NA>   
##  4  25.8 -100. Restaura… POLLOS… <NA>    0 a 5 … CALLE   LA ESP… <NA>    <NA>   
##  5  25.7 -100. Restaura… RESTAU… <NA>    11 a 3… AVENIDA ALFONS… <NA>    <NA>   
##  6  25.7 -100. Restaura… COMIDA… <NA>    0 a 5 … CALLE   AARON … <NA>    PLANTA…
##  7  25.7 -100. Restaura… POLLOS… <NA>    0 a 5 … AVENIDA JESUS … <NA>    <NA>   
##  8  25.6 -100. Restaura… LA BAR… LA BAR… 0 a 5 … BOULEV… ACAPUL… <NA>    <NA>   
##  9  25.8 -100. Restaura… PUESTO… <NA>    0 a 5 … CALLE   SAN FR… <NA>    <NA>   
## 10  25.7 -100. Restaura… ROMEOS… OPERAD… 0 a 5 … CALLE   DOMING… <NA>    <NA>   
## # … with 828 more rows, 18 more variables: tipo_asent <chr>, nomb_asent <chr>,
## #   tipoCenCom <chr>, nom_CenCom <chr>, num_local <chr>, cod_postal <chr>,
## #   cve_ent <dbl>, entidad <chr>, cve_mun <dbl>, municipio <chr>,
## #   cve_loc <dbl>, localidad <fct>, ageb <chr>, manzana <dbl>, AGEB_int <chr>,
## #   geohash5km <chr>, tipoUniEco <chr>, fecha_alta <chr>, and abbreviated
## #   variable names ¹​nombre_act, ²​nom_estab, ³​raz_social, ⁴​tipo_vial, ⁵​nom_vial,
## #   ⁶​edificio, ⁷​edificio_e

En base a que ya sabemos que la familia de alimentos que más deja ingresos es la animal y también sabemos que de sus clientes actuales la mayor parte son restaurantes, volvemos a filtrara los prospectos enfocándonos en restaurantes con servicio de preparación de alimentos a la carta o de comida corrida y Restaurantes con servicio de preparación de pizzas, hamburguesas, hot dogs y pollos rostizados para llevar.

ggplot() + geom_sf(data = map_sf)  +
  geom_point(data = base_f, aes(x = long, y = lat, color = localidad)) +
  theme_void() + theme(legend.position = "right")

Despues de filtrar los prospectos podemos observar que de los 10,000 prospectos iniciales solamente quedan 838 que pensamos podrían ser buenos clientes para la empresa. Podemos observar en la gráfica anterior donde estan ubicados.

mapa_markers <- leaflet(data=base_f) %>%
  addTiles() %>%
  addMarkers(lng = ~long, lat=~lat, popup = ~nom_estab)
mapa_markers

En la gráfica anterior podemos observar mucho más detalladamente la ubicación de los prospectos que proponemos para la empresa.

VI. Líneas de acción

Herramientas para convertir clientes potenciales a clientes activos:

  • Salesforce es una plataforma que se especializa en gestionar las relaciones con los clientes para automatizar los procesos de ventas sin embargo tiene unas funciones avanzadas para gestionar a los clientes potenciales donde se realiza un seguimiento de ventas y análisis de datos para facilitar la conversión de clientes potenciales.

  • Hubspot es una herramienta CRM y de marketing que tiene funciones para ayudar a las empresas a atraer, comprometer y convertir clientes potenciales en clientes mediante el seguimiento del comportamiento de usuario, marketing de contenido y correo electrónico esto para poder ayudar a la empresa a generar estrategias efectivas para conversión de clientes.

  • Google ads es una plataforma en línea que permite a las empresas mostrar anuncios relevantes a clientes potenciales con la herramienta de búsqueda de Google y en su red de socios tiene herramientas como palabras clave, segmentación demográfica y remarketing, para ayudar a las empresas a atraer la atención de clientes potenciales y llevarlos a través del grupo de ventas establecido

Es importante mantener una comunicación con los clientes actuales, en ocasiones las compañías se enfocan en conseguir nuevos clientes y descuidan a los clientes actuales.

Crear una buena experiencia para el cliente antes, durante y después del proceso de compra es importante ya que esto creará retención y lealtad.

Tips para tener un Client engagement strategy efectivo:

  • Visitas a clientes
  • Visitar al cliente puede abrir las puertas a muchas oportunidades, como crear una mejor y más profunda relación o crear más oportunidad de venta al discutir los objetivos y necesidades del cliente.
  • Tomar en cuenta las opiniones del cliente

Una forma efectiva de demostrarle al cliente su importancia dentro de la compañía es al valorar su opinión, esta comunicación se puede crear por medio de una llamada telefónica en la que el objetivo será obtener retroalimentación acerca de la experiencia al tratar con la compañía.

Casos de éxito

Espontaneidad de Contacto: Rappi

Rappi utiliza este método muy seguido con clientes que han tenido periodos largos de inactividad con sus servicios. Su estrategia se basa en múltiples actividades diferentes con la finalidad de reactivar su participación. Estos incluyen correos promocionales o incluso descuentos en ciertas localizaciones de uso. Además, Rappi busca incentivar esta participación buscando fechas especiales y el contacto más participativo posible que se pueda hacer entre el negocio y el cliente.

VII. Escenario y modelo de riesgo

Para el caso hemos decidido implementar un modelo de riesgo de árboles que permitiera evaluar si valía la pena efectuar un pedido en función de la variable generada por nosotros calculando el total de cada pedido se utilizó un boxplot para analizar la distribución de los valores y comprender la media máxima y mínima de la variable “total”

Durante el análisis, se identificó que el primer cuartil de la distribución se encontraba en 520 unidades monetarias. Teniendo en cuenta esta referencia, se tomó la decisión de transformar la variable “total” en una variable binaria, asignando el valor de 0 a aquellos pedidos cuyo total era inferior a 520 (lo que indica que no resultaban rentables) y el valor de 1 a aquellos pedidos cuyo total era superior a 520 (lo que indica que sí resultaban rentables).

El árbol de decisiones quedo con los siguientes niveles determinando el riesgo dependiendo de diferentes variables independientes.

margen<-read_xlsx("catalogo_v2.xlsx") 
BaseM <- merge(Base,margen, by = "id_producto" )
BaseM$total <- BaseM$cantidad * BaseM$precio_unidad.x
library(dplyr)

# Calcular el promedio del margen agrupado por id_pedido
BasePM1 <- BaseM %>% 
  group_by(id_pedido) %>% 
  summarize(promedio_margen = mean(margen),
            suma_cantidad = sum(cantidad),
            suma_total = sum(total),
            cve_mun1 = mean(CVE_MUN),
            id_cliente1 = mean(id_cliente))
## Warning: There were 60000 warnings in `summarize()`.
## The first warning was:
## ℹ In argument: `cve_mun1 = mean(CVE_MUN)`.
## ℹ In group 1: `id_pedido = 1`.
## Caused by warning in `mean.default()`:
## ! argument is not numeric or logical: returning NA
## ℹ Run ]8;;ide:run:dplyr::last_dplyr_warnings()dplyr::last_dplyr_warnings()]8;; to see the 59999 remaining warnings.
summary(BasePM1$suma_total)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##      15    5796    8190    8332   10676   25730
summary(BasePM1$promedio_margen)
##    Min. 1st Qu.  Median    Mean 3rd Qu.    Max. 
##  0.0200  0.1471  0.1729  0.1723  0.1983  0.3000
df1<- BasePM1

library(rpart)
library(rpart.plot)


# df1$total <- df1$cantidad * df1$precio_unidad.x
df1$totaloptimo <- ifelse(df1$suma_total <= 5800, 0, 1)

set.seed(42)
train_indices <- sample(nrow(df1), floor(0.3 * nrow(df1)))
train_data <- df1[train_indices, ]
test_data <- df1[-train_indices, ]


model <- rpart(totaloptimo ~ promedio_margen+suma_cantidad+cve_mun1, data = train_data, method = "class",minsplit = 10, minbucket = 5, cp = 0.01,)


rpart.plot(model)

# modelo para realizar nuevas predicciones
predictions <- predict(model, test_data, type = "class")

# Calcular la precisión del modelo
accuracy <- sum(predictions == test_data$totaloptimo) / nrow(test_data)
print(paste("Precisión del modelo:", accuracy))
## [1] "Precisión del modelo: 0.87452380952381"

De esta manera, se obtuvo un modelo de riesgo de árboles que permitía evaluar la rentabilidad de los pedidos de manera rápida y eficiente. Al aplicar este modelo a los nuevos pedidos, se podía determinar si era conveniente realizar el envío o no, contribuyendo así a disminuir el riesgo.

VIII. Futuro de la industria

  • Se prevé que el ingreso bruto per cápita en México aumente 33,6% en términos reales hasta 2040 (Euromonitor Login, s. f.).

  • Se pronostica que los alimentos y las bebidas no alcohólicas serán la categoría de mayor gasto de consumo en 2040 (Euromonitor Login, s. f.).

  • La región de Nuevo León registrará la expansión más rápida en los principales mercados de consumo del país durante 2021-2040 (Euromonitor Login, s. f.).

  • Se prevé que el número de hogares en México aumente un 16.9% durante el período de pronóstico alcanzando los 42,5 millones para 2040 (Euromonitor Login, s. f.).

  • Se prevé que el ingreso disponible por hogar en México aumente un 29,5% en términos reales durante 2021-2040 (Euromonitor Login, s. f.).

  • La tasa de desempleo se reducirá y representará el 3,8% de la población económicamente activa total para 2040 (Euromonitor Login, s. f.).

  • La proporción de hogares que poseen una tableta crecerá más entre todos los dispositivos digitales, pasando del 32,2% en 2021 al 77,2% de todos los hogares en 2040 (Euromonitor Login, s. f.).

IX. Recomendaciones

Análisis de competidores: En análisis de la competencia siempre es importante para el éxito de cualquier expansión, pero sobre todo en el mundo de los snacks, que tiende a ser una industria con alta competencia. Usando esta estrategia se podrá brindar una comprensión del panorama competitivo, y se podrán tomar decisiones estratégicas como la diferenciación de productos, la selección de precios y la implementación de promociones especiales.

Optimización de la distribución y logística: La optimización de la distribución y logística de entrega también es fundamental para poder hacer entrega de productos eficientemente a los clientes. Ya cuentan con una entrega de dos días, pero es importante considerarlo para la expansión futura, por ejemplo los patrones de tráfico, rutas óptimas y las áreas de congestión. Así la compañía podrá optimizar la cadena de suministro, reducir costos operativos, y mejorar la experiencia del cliente.

Evaluación de la demanda: La demanda es importante considerar sobre todo para los clientes ya activos, dependiendo de la ubicación en la que se encuentren. También es importante analizar el tamaño de la población, poder adquisitivo y los patrones de consumo de las zonas de Monterrey.

X. Referencias y Citas

Alimentos, H. (n.d.). Calidad y frescura. Distribuidora de Alimentos en Monterrey - HB Alimentos. https://www.hbalimentos.com/index.html

Casa Garza. (n.d.). https://casagarza.mx/

Datlas (n.d.) Transformando datos en inteligencia de negocios Datlas_Situación_Problema_2023 (1).pdf

INEGI. (n.d.). El Inegi da a conocer los resultados de la encuesta nacional de … https://www.inegi.org.mx/contenidos/saladeprensa/boletines/2021/EstSociodemo/enigh2020.pdf

Euromonitor Login. (s. f.). https://www.portal.euromonitor.com/analysis/tab

Aubagna, M. (2023, March 31). 5 Tips to Reactivate Dormant Customers. Skeepers. https://skeepers.io/en/blog/5-tips-to-reactivate-dormant-customers/

Watts, L. (2020, August 24). The Power Of A Client Engagement Strategy. Forbes. https://www.forbes.com/sites/forbescommunicationscouncil/2020/08/24/the-power-of-a-client-engagement-strategy/?sh=4e99c6d21d13